/*
 * Http.h
 *
 *  Created on: 2011/05/28
 *      Author: naoki
 */
#ifndef INCLUDED_NTENGINE_NET_HTTP_H
#define INCLUDED_NTENGINE_NET_HTTP_H

namespace NTEngine {
namespace Net {

/**
 * @brief Http
 */
class Http {
public:
	/// METHOD指定用
	static const char METHOD_GET[];
	static const char METHOD_POST[];
	static const char METHOD_PUT[];
	static const char METHOD_DELETE[];

	/**
	 * インスタンスを生成
	 */
	static Http create( const char* url,
		const char* method = METHOD_GET,
		const char* body = 0,
		const char** headers = 0, int headerLength = 0 );

	/**
	 * 通信終わった？
	 */
	bool isFinished() const;

	/**
	 * エラー？
	 */
	bool isError() const;

	/**
	 * レスポンスコードの取得
	 */
	int responseCode() const;

	/**
	 * レスポンスバッファの取得
	 */
	const char* responseBuffer() const;

	/**
	 * レスポンスサイズの取得
	 */
	int responseSize() const;

	///
	Http();
	~Http();
	Http( const Http& );
	Http& operator=( const Http& );
	operator void*() const;
	void release();
	bool operator==( const Http& ) const;
	bool operator!=( const Http& ) const;
	int referenceCount() const;
	class Impl;
private:
	Impl* mImpl;
};

} // namespace Net
} // namespace NTEngine

#endif // INCLUDED_NTENGINE_NET_HTTP_H
